
/**
 * DESCRIPCION:
 * Servlet post que sirve para subir un archivo al servidor 
 * 
 *MAPEO EN APLICACION: 
 * Para mapearlo en el aplicativo incluir en el archivo de despliegue.
 
	<servlet>
        <servlet-name>ServletSubirArchivo</servlet-name>
        <servlet-class>ec.edu.ups.cidi.siia.plamdep.frontend.utils.ServletSubirArchivo</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>ServletSubirArchivo</servlet-name>
        <url-pattern>/upload/*</url-pattern>
    </servlet-mapping>
    
  *DEPENDENCIAS
  	<!-- Dependencia para subir archivos -->
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
  * TEST: 
   Para invocarlo usar el siguiente codigo html
  
   <form method="POST" enctype="multipart/form-data" action="#{request.contextPath}/upload/subir.html">
   File to upload: <input type="file" name="upfile"/>
 
  		<input type="submit" value="Press"/> 
  </form>
  
  
 *
 */

package ec.edu.ups.cidi.siia.plamdep.frontend.utils;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

public class CopyOfServletSubirArchivo extends HttpServlet {

	protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
			boolean ok = getNSaveFile(request);
			response.setContentType("text/html");
			PrintWriter out = response.getWriter();
			out.println("");
			out.println("");
			out.println("");
			out.println("");
			out.println("");
			if (ok) {
			out.println("La transferencia del archivo fue exitosa.");
			} else {
				
			//sirve para redireccionar	
			//RequestDispatcher rd = request.getRequestDispatcher("/resultado.jsp");

			out.println("Fallo en transferencia de archivo.");
			}
		
			out.close();
	}


	public boolean getNSaveFile(HttpServletRequest request) {
	try {


		// Chequea que sea un request multipart (que se este enviando un file)
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
		System.out.println("Is multipart=" + isMultipart);
		DiskFileItemFactory factory = new DiskFileItemFactory();
		// maxima talla que sera guardada en memoria
		factory.setSizeThreshold(4096);
		// si se excede de la anterior talla, se ira guardando temporalmente, en la sgte direccion
		factory.setRepository(new File("d:/"));
		ServletFileUpload upload = new ServletFileUpload(factory);
		//maxima talla permisible (si se excede salta al catch)
		upload.setSizeMax(10000000);
		List fileItems = upload.parseRequest(request);
		//obtiene el file enviado
		Iterator i = fileItems.iterator();
		FileItem fi = (FileItem) i.next();
		//graba el file enviado en el servidor local
		//path y Nombre del archivo destino (en el server)
		String path = "/opt";
		String fileName = "nuevo.txt";
		fi.write(new File(path, fileName));


	} catch (Exception e) {
		System.out.println(e.getMessage());
		e.printStackTrace();
		return false;
	}
	return true;
	}

	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		processRequest(request, response);
	}


	}